#ifndef frm_TFont_H
#define frm_TFont_H

#include "svl_TValue.h"
#include "frm.h"

namespace frm {

///////////////////////////////////////////////////////////////////////////////

struct TFont : public grf::TFont , public svl::TArray_Object
{
  //////////////////////////////////
  struct TStyle : public svl::TValue
  {
    grf::TFontStyle Value;
    //
    void SetNormal()                 { SetValue(grf::TFontStyle());}
    void SetValue(grf::TFontStyle V) { isNull = false; Value = V;}
    grf::TFontStyle GetValue()       { if (isNull) { Except("GetValue[IsNull]"); } return Value;}
    //
    void AddValue(grf::TFontStyle::Enum V) { isNull = false; Value << V;}
    void Clear()                           { isNull = true;  Value.Clear(); }
    
  private:
    svl_Except;
  };
  //////////////////////////////////
  struct TColor : public svl::TValue
  {
    grf::TColor Value;
    //
    void SetValue(grf::TColor V)     { isNull = false; Value = V;}
    void SetValue(int R,int G,int B) { isNull = false; Value = grf::TColor(R,G,B);}
    //
    grf::TColor GetValue() { if (isNull) { Except("GetValue[IsNull]"); } return Value;}
    
  private:
    svl_Except;
  };
  //
  svl::TValueString  Name;
  svl::TValueInteger Height;
  svl::TValueInteger Height_Delta;
  TStyle             Style;
  TColor             Color;
  //
  TFont() { parent = NULL; scale = 1; }
  //
  void AddChild (TFont &V);
  void SetParent(TFont &V) { V.AddChild(*this);}
  //
  void CalcAll();
  //
  void ToScale(double Scale);
  void Paint(TComponent &Component,TPaint &Paint,char *String);
  //
  virtual svl::TInfoParam AddInfoTo(svl::TInfoParam Info);

private:
  void CalcChildren
  (
    svl::TValueString  *PName,
    svl::TValueInteger *PHeight,
    svl::TValueInteger *PHeight_Delta,
    TStyle             *PStyle,
    TColor             *PColor
  );
  svl::TArray children;
  TFont *parent;
  double scale;
  svl_Except;
};

///////////////////////////////////////////////////////////////////////////////
}

#endif
